package serialize

import (
	"context"
	"encoding/json"
	"fmt"
	"time"

	"github.com/go-redis/redis/v8"
)

type SuDbConfig struct {
	Host     string `json:"host"`
	Port     int64  `json:"port"`
	User     string `json:"user"`
	Password string `json:"password"`
	Db       string `json:"database"`
}

type CacheSu struct {
	SuId      int64  `json:"suid"`
	Host      string `json:"host"`
	Port      int64  `json:"port"`
	ProxyHost string `json:"proxy_host"`
	ProxyPort int64  `json:"proxy_port"`
	UseProxy  int64  `json:"use_proxy"`
	GmHost    string `json:"gm_host"`
	GmPort    int64  `json:"gm_port"`
	DbConfig  string `json:"db_config"`
}

type CacheChannel struct {
	Id         int64  `json:"id"`
	GroupId    int64  `json:"group_id"`
	ChannelKey string `json:"channel_key"`
}

type CacheLu struct {
	SuId       int64     `json:"suid"`
	Id         int64     `json:"id"`
	MasterId   int64     `json:"master_id"`
	Name       string    `json:"name"`
	TabId      int64     `json:"tabId"`
	BitFlag    int64     `json:"bitflag"`
	Commend    int64     `json:"commend"`
	Status     int64     `json:"status"`
	CreateTime time.Time `json:"create_time"`
}

type CacheGroup struct {
	ID              int64  `json:"id"`
	Version         int64  `json:"version"`
	ResourceVersion int64  `json:"resource_version"`
	AuditVersions   string `json:"audit_versions"`
	AuditServers    string `json:"audit_servers"`
	Cdn             string `json:"cdn"`
	Login           string `json:"login"`
	Card            string `json:"card"`
	Custom          string `json:"custom"`
	Other           string `json:"other"`
}

// CacheData 缓存数据的结构
type CacheData interface{}

func SetCache(ctx context.Context, rdb *redis.Client, id string, prefix string, data CacheData) error {
	dataInfo, err := json.Marshal(data)
	if err != nil {
		return err
	}

	var result map[string]interface{}
	err = json.Unmarshal(dataInfo, &result)
	if err != nil {
		return err
	}

	err = rdb.HMSet(ctx, fmt.Sprintf("%s|%v", prefix, id), result).Err()
	if err != nil {
		return err
	}

	return nil
}
